package com.example.chatbot.api.domain.zsxq.service;

import com.alibaba.fastjson.JSON;
import com.example.chatbot.api.domain.zsxq.IZsxqApi;
import com.example.chatbot.api.domain.zsxq.model.aggregates.UnAnsweredQuestionsAggregates;
import com.example.chatbot.api.domain.zsxq.model.req.AnswerReq;
import com.example.chatbot.api.domain.zsxq.model.req.ReqData;
import com.example.chatbot.api.domain.zsxq.model.res.AnswerRes;
import org.apache.http.HttpStatus;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

import java.io.IOException;
import java.rmi.RemoteException;

@Service
public class ZsxqApi implements IZsxqApi {
    
    private Logger logger= LoggerFactory.getLogger(ZsxqApi.class);

    /**
     * 用于获取 知识星球未回答的题目
     *
     * @param groupId 星球id
     * @param cookie  cookie
     * @return
     * @throws IOException
     */
    @Override
    public UnAnsweredQuestionsAggregates queryUnAnsweredQuestionsTopicId(String groupId, String cookie) throws IOException {
        CloseableHttpClient httpClient= HttpClientBuilder.create().build();
        HttpGet get = new HttpGet("https://api.zsxq.com/v2/groups/"+groupId+"/topics?scope=unanswered_questions&count=20");
        get.addHeader("cookie",cookie);
        get.addHeader("Content-type", "application/json;charset=utf-8");
        CloseableHttpResponse response =httpClient.execute(get);
        if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
            String jsonStr = EntityUtils.toString(response.getEntity());
            logger.info("拉取提问数据。jsonStr：{}", jsonStr);
            return JSON.parseObject(jsonStr, UnAnsweredQuestionsAggregates.class);
        }
        else {
            throw new RemoteException("UnAnsweredQuestionsAggregates err code is"+response.getStatusLine().getStatusCode());
        }
    }

    /**
     * 回答一个topic问题
     *
     * @param groupId
     * @param cookie
     * @param topicId
     * @param text
     * @param silenced
     * @return
     * @throws IOException
     */
    @Override
    public boolean answer(String groupId, String cookie, String topicId, String text, boolean silenced) throws IOException {
        CloseableHttpClient httpClient = HttpClientBuilder.create().build();
        HttpPost httpPost = new HttpPost("https://api.zsxq.com/v2/topics/"+topicId+"/answer");
        httpPost.addHeader("cookie", cookie);
        httpPost.addHeader("Content-type", "application/json;charset=utf-8");
        httpPost.addHeader("user-agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0");
        AnswerReq answerReq = new AnswerReq(new ReqData(text, silenced));
        String paramJson = JSON.toJSONString(answerReq);
        StringEntity stringEntity = new StringEntity(paramJson, ContentType.create("text/json", "UTF-8"));
        httpPost.setEntity(stringEntity);
        CloseableHttpResponse response = httpClient.execute(httpPost);
        if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
            String jsonStr = EntityUtils.toString(response.getEntity());
            logger.info("回答问题结果->groupId:{} topicId:{} jsonStr: {}",groupId,topicId,jsonStr);
            String res = EntityUtils.toString(response.getEntity());
            AnswerRes answerRes = JSON.parseObject(jsonStr, AnswerRes.class);
            return answerRes.isSucceeded();
        } else {
            throw new RuntimeException("answer Code is "+response.getStatusLine().getStatusCode());
        }
    }
}
